package com.test.util;

import java.util.ArrayList;
import java.util.List;

/**
 * 字符串操作工具类. <br>
 * 继承apache提供的StringUtils，利用其字符串操作方法及对其扩展方法.
 * <p>
 * Copyright: Copyright (c) Nov 10, 2010 10:21:59 AM
 * <p>
 * Company: 北京宽连十方数字技术有限公司
 * <p>
 * 
 * @author suncg@c-platform.com
 * @version 1.0.0
 */
public class StringUtils extends org.apache.commons.lang.StringUtils {

	/**
	 * 字符串连接
	 * 
	 * @param content
	 *            文本内容
	 * @param appendContent
	 *            连接串
	 * @return
	 */
	public static String concat(String content, String appendContent) {
		if (isEmpty(content)) {
			return EMPTY;
		}
		return content.concat(appendContent);
	}

	/**
	 * 去掉HTML标记
	 * 
	 * @param html
	 *            html内容
	 * @return
	 */
	public static String getHTMLText(String html) {
		if (isEmpty(html)) {
			return EMPTY;
		}
		return html.replaceAll("<[^>]*>", "").replace("&nbsp;", " ");
	}

	/**
	 * 截取html 大于html内容长度 连接regix
	 * 
	 * @param html
	 *            html内容
	 * @param regix
	 *            连接符 如...
	 * @param length
	 *            要求长度
	 * @return
	 */
	public static String getPartText(String html, String regix, int length) {
		if (isEmpty(html)) {
			return EMPTY;
		}
		if (isEmpty(regix)) {
			regix = "...";
		}
		html = trimToEmpty(html);
		int htmlLength = html.length();
		if (htmlLength > length) {
			return concat(substring(html, 0, length), regix);
		} else {
			return html;
		}
	}

	/**
	 * 获取字符串长度 一个汉字或日韩文长度为2,英文字符长度为1<br>
	 * 
	 * @param s
	 *            字符串
	 * @return
	 */
	public static int lengthCH(String s) {
		if (s == null) {
			return 0;
		}
		char[] c = s.toCharArray();
		int len = 0;
		for (int i = 0; i < c.length; i++) {
			len++;
			if (c[i] / 0x80 != 0) {
				len++;
			}
		}
		return len;
	}

	/**
	 * 英文长度
	 * 
	 * @param str
	 * @return
	 */
	public static int lengthEN(String str) {
		if (isEmpty(str)) {
			return 0;
		}
		return str.length();
	}

	public static void main(String[] args) {

		System.out.println("==========isEmpty=============");
		System.out.println(StringUtils.isEmpty(null)); // true
		System.out.println(StringUtils.isEmpty("")); // true
		System.out.println("===========join============");
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		System.out.println(StringUtils.join(list, ","));// a,b
		System.out.println("===========isBlank============");
		System.out.println(StringUtils.isBlank("")); // true
		System.out.println(StringUtils.isBlank(null));// true
		System.out.println(StringUtils.isBlank(" "));// true
		System.out.println(StringUtils.isBlank("\t \n \f \r"));// true
		System.out.println(StringUtils.isBlank(" "));// true 中文空白
		System.out.println("===========trim trimToEmpty trimToNull============");
		System.out.println(StringUtils.trimAllSpace(null));// null
		System.out.println(StringUtils.trimToEmpty(null));// ""
		System.out.println(StringUtils.trimToNull(""));// null
		System.out.println(StringUtils.trimAllSpace("     \b \t \n \f \r     "));// 包含中文空白
		// ""
		System.out.println("==========equals============");
		System.out.println(StringUtils.equals("a", null));// false
		System.out.println("==============indexOf=============");
		System.out.println(StringUtils.indexOf("abc", "a"));// 0
		System.out.println(StringUtils.indexOf(null, "a"));// -1
		System.out.println(StringUtils.indexOf("abc", null));// -1
		System.out.println(StringUtils.indexOf("abcd", "erft"));// -1
		System.out.println(StringUtils.indexOf("会见达赖", "见达赖"));
		System.out.println("==============split=============");
		System.out.println(StringUtils.split("a b c   d", null).length);// 4
		// null则按空格分解
		System.out.println(StringUtils.split("a/b/sc/d", "/").length);
		System.out.println(StringUtils.splitRegex(null, "\\s").length);
		System.out.println("==============repeate=============");
		System.out.println(StringUtils.repeat("*", 10));// **********
		System.out.println("==============center=============");
		System.out.println(StringUtils.center("a", 10, "*"));// ****a*****
		System.out.println("===============reverse===============");
		System.out.println(StringUtils.reverse("abc"));// cba null---null
		System.out.println("===============================");
		System.out.println(StringUtils.isNumeric("1234") + "---" + StringUtils.isAlpha("abc"));// true数字
		// ---
		// true字母
		System.out.println("=================replace==============");
		// 把a b c d中空白用s替代
		System.out.println(StringUtils.replace("a b c d", " ", "s"));// asbscsd
		System.out.println("=================contains==============");
		System.out.println(StringUtils.contains("abc", "a"));// true
		System.out.println("=================rightPad leftPad==============");
		// abc连接> 连接后长度为5
		System.out.println(StringUtils.rightPad("abc", 5, ">"));// abc>>
		System.out.println(StringUtils.leftPad("abc", 5, ">"));// >>abc
		System.out.println("=================upperCase lowerCase==============");
		System.out.println(StringUtils.upperCase("abc") + "---" + StringUtils.lowerCase("ABC"));// ABC---abc

		System.out.println("".equals(StringUtils.EMPTY));
	}

	/**
	 * 通过正则表达式对字符串进行分割
	 * 
	 * @param str
	 *            字符串
	 * @param regex
	 *            正则表达式
	 * @return
	 */
	public static String[] splitRegex(String str, String regex) {
		String[] array = new String[0];
		if (isEmpty(str) || isEmpty(regex)) {
			return array;
		}
		array = str.split(regex);
		if (array == null) {
			return new String[0];
		}
		return array;
	}

	/**
	 * 在字符串中截取子串(一个汉字或日韩文长度为2,英文字符长度为1)<br>
	 * 
	 * @param s
	 * @param start
	 *            开始位置
	 * @param length
	 *            子串长度
	 * @return
	 */
	public static String subCHstring(String s, int start, int length) {
		if (s == null) {
			return null;
		}
		StringBuffer builder = new StringBuffer();
		char[] c = s.toCharArray();
		int location = 0;
		for (int i = 0; i < c.length; i++) {
			if (location == start) {
				builder.append(c[i]);
			} else if (location > start && location < start + length) {
				builder.append(c[i]);
			}
			// 双字符
			if (c[i] / 0x80 != 0) {
				location = location + 2;
			} else {
				location = location + 1;
			}
		}
		return builder.toString();
	}

	/**
	 * 将HTML标记转换为文本
	 * 
	 * @param html
	 *            html内容
	 * @return
	 */
	public static String transaferHTML(String html) {
		if (isEmpty(html)) {
			return EMPTY;
		}
		return html.replace("<", "&lt;").replace(">", "&gt;");
	}

	/**
	 * 过滤掉所有空白<br>
	 * 
	 * @param str
	 *            字符串
	 * @return
	 */
	public static String trimAllSpace(String str) {
		if (str == null) {
			return EMPTY;
		}
		return str.trim().replace("\t", StringUtils.EMPTY).replaceAll("\\s", StringUtils.EMPTY).replaceAll("　", StringUtils.EMPTY);
	}
}
